home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-9.10-netbook-remix-PL.iso / casper / filesystem.squashfs / usr / share / pyshared / nevow / query.py < prev    next >
Text File  |  2006-10-06  |  3KB  |  111 lines

  1. # Copyright (c) 2004 Divmod.
  2. # See LICENSE for details.
  3.  
  4. """inevow.IQ adapter implementations.
  5. """
  6. import twisted.python.components as tpc
  7.  
  8. from nevow import inevow, stan
  9. from zope.interface import implements
  10.  
  11. class QueryContext(tpc.Adapter):
  12.     implements(inevow.IQ)
  13.  
  14.     def _locatePatterns(self, pattern, default, loop=True):
  15.         if self.original.tag.pattern == pattern:
  16.             yield self.original.tag.clone(deep=False, clearPattern=True)
  17.         for node in stan._locatePatterns(self.original.tag, pattern, default):
  18.             yield node
  19.  
  20.     def patternGenerator(self, pattern, default=None):
  21.         return stan.PatternTag(self._locatePatterns(pattern, default))
  22.  
  23.     def allPatterns(self, pattern):
  24.         if self.original.tag.pattern == pattern:
  25.             yield self.original.tag
  26.         for pat in self.original.tag.allPatterns(pattern):
  27.             yield pat
  28.  
  29.     def onePattern(self, pattern):
  30.         return self.original.tag.onePattern(pattern)
  31.  
  32.  
  33. class QueryList(tpc.Adapter):
  34.     def _locatePatterns(self, pattern, default, loop=True):
  35.         produced = []
  36.         for item in self.original:
  37.             try:
  38.                 for x in inevow.IQ(item)._locatePatterns(pattern, None, loop=False):
  39.                     produced.append(x)
  40.                     yield x.clone(deep=False, clearPattern=True)
  41.             except stan.NodeNotFound:
  42.                 continue
  43.  
  44.         if produced:
  45.             while True:
  46.                 for x in produced:
  47.                     yield x.clone(deep=False, clearPattern=True)
  48.  
  49.         if default is None:
  50.             raise stan.NodeNotFound, ("pattern", pattern)
  51.         if hasattr(default, 'clone'):
  52.             while True: yield default.clone(deep=False)
  53.         else:
  54.             while True: yield default
  55.  
  56.     def patternGenerator(self, pattern, default=None):
  57.         return stan.PatternTag(
  58.             self._locatePatterns(pattern, default))
  59.  
  60.     def allPatterns(self, pattern):
  61.         for item in self.original:
  62.             for pat in inevow.IQ(item).allPatterns(pattern):
  63.                 yield pat
  64.  
  65.     def onePattern(self, pattern):
  66.         node = None
  67.         for item in self.original:
  68.             try:
  69.                 newNode = inevow.IQ(item).onePattern(pattern)
  70.             except stan.NodeNotFound:
  71.                 continue
  72.             else:
  73.                 if node is None:
  74.                     node = newNode
  75.                 else:
  76.                     raise stan.TooManyNodes('pattern', pattern)
  77.         if node is None:
  78.             raise stan.NodeNotFound('pattern', pattern)
  79.         return node
  80.  
  81.  
  82. class QuerySlot(QueryList):
  83.     def __init__(self, original):
  84.         QueryList.__init__(self, original.children)
  85.  
  86.  
  87. class QueryNeverFind(tpc.Adapter):
  88.     def patternGenerator(self, pattern, default=None):
  89.         raise stan.NodeNotFound, ('pattern', pattern)
  90.  
  91.     def allPatterns(self, pattern):
  92.         return []
  93.  
  94.     def onePattern(self, pattern):
  95.         raise stan.NodeNotFound, ('pattern', pattern)
  96.  
  97.     def _locatePatterns(self, pattern, default, loop=True):
  98.         return []
  99.  
  100.  
  101. class QueryLoader(tpc.Adapter):
  102.     def patternGenerator(self, pattern, default=None):
  103.         return inevow.IQ(self.original.load()).patternGenerator(pattern, default)
  104.  
  105.     def allPatterns(self, pattern):
  106.         return inevow.IQ(self.original.load()).allPatterns(pattern)
  107.  
  108.     def onePattern(self, pattern):
  109.         return inevow.IQ(self.original.load()).onePattern(pattern)
  110.  
  111.